package com.shujia.day02;

public class Demo11ContinueWhile {
    public static void main(String[] args) {
        /*
            TODO while循环
                格式:
                    初始化语句;
                    while(判断语句){
                        循环体;
                        控制语句;
                    }
               执行顺序：
                初始化语句 -> 判断语句  -(true)-> 循环体 ->  控制语句 ...
                                      -(false)-> 退出循环
               注意：
                 ① 对于while循环和for循环之间都可以相互转换
                    for循环语句和while循环语句可以等价转换，但还是有些小区别的
                使用区别：控制条件语句所控制的那个变量，在for循环结束后，就不能再被访问到了，
                而while循环结束还可以继续使用，如果你想继续使用，就用while，否则推荐使用for。
                原因是for循环结束，该变量就从内存中消失，能够提高内存的使用效率。

         */

        // 求出1-100之间奇数和
        int sum = 0;
        int i = 1;  // 该变量定义在while循环之外，当while循环结束后，可以继续使用
        while (i <= 100) {
            if (i % 2 == 1) {
                System.out.println(i + "是奇数");
                sum += i;
            }
            i++;
        }
        System.out.println("sum:" + sum);

        /*
            我国最高山峰是珠穆朗玛峰：8848m，我现在有一张足够大的纸张，厚度为：0.01m。
            请问，我折叠多少次，就可以保证厚度不低于珠穆朗玛峰的高度?
         */

        /*
            TODO do ... while
                格式：
                初始化语句;
                do{
                    循环体;
                    控制语句;
                } while(判断语句);
             执行顺序：
                初始化语句 -> 循环体 -> 控制语句 -> 判断语句  -(true)-> 继续执行 循环体...
                                                         -(false)-> 退出循环


            do while 和 while的区别在于 do...while不管判断条件是否满足，都会执行一次循环体


         */

        int sum2 = 0;
        int i2 = 1;  // 该变量定义在while循环之外，当while循环结束后，可以继续使用
        do {
            if (i2 % 2 == 1) {
                System.out.println(i2 + "是奇数");
                sum2 += i2;
            }
            i2++;
        } while (i2 <= 0);
        System.out.println("sum2:" + sum2); // 1

        /*
            写程序优先考虑for循环，再考虑while循环，最后考虑do…while循环。
         */

        // TODO 死循环
//        while (true){}
//        System.out.println("程序是否能执行到该处...");
        // Process finished with exit code 0 退出代码为0 表示程序正常退出


        /*
            TODO 对于字符串不断进行累加，最终会超过内存上限
            java.lang.OutOfMemoryError: Java heap space
         */
        String str = "死循环死循环死循环死循环死循环死循环死循环";
//        while (true){
//            str += str;
//        }
    }
}
